#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//int main()
//{
//	int n = 9;
//	//00000000 00000000 00000000 00001001  原码
//	//00000000 00000000 00000000 00001001  补码   整型的读取方式
//	float* pFloat = (float*)&n;
//	//00000000 00000000 00000000 00001001
//	//0 00000000 00000000000000000001001
//	//s=0,e=1-127=-126,m=0.1001
//	//(-1)^0*0.1001*2^-126=0
//	printf("n的值为：%d\n", n);
//	printf("*pFloat的值为：%f\n", *pFloat);
//
//
//
//	*pFloat = 9.0;
//	//1001.0=(-1)^0*1.001*2^3
//	//s=0,e=3+127=130,m=001
//	//0 10000010 00100000000000000000000
//	//0100 0001 0001 0000 0000 0000 0000 0000
//	//上述转换为十进制为1,091,567,616
//	printf("num的值为：%d\n", n);
//	printf("*pFloat的值为：%f\n", *pFloat);
//	//9.0
//	return 0;
//}


//int main()
//{
//	char ch = 'w';
//	char* p = &ch;
//
//	//char* psr = "abcdef";
//	//const被修饰的内容，不能被更改
//	const char* psr = "abcdef";//const修饰的是*psr，指针的内容不能被修改
//	//*psr = "a";
//	printf("%s\n", psr);
//	printf("%c\n",*psr);
//	return 0;
//}


//int main()
//{
//	char str1[] = "hello bit.";
//	char str2[] = "hello bit.";
//	const char* str3 = "hello bit.";
//	const char* str4 = "hello bit.";
//	char* str5 = "he";
//	char* str6 = "he";
//	if (str1 == str2)
//	{
//		printf("str1 and str2 are same\n");
//	}
//	else
//	{
//		printf("str1 and str2 are not same\n");
//	}
//
//	if (str3 == str4)
//	{
//		printf("str3 and str4 are same\n");
//	}
//	else
//	{
//		printf("str3 and str4 are not same\n");
//	}
//
//
//	if (str5 == str6)
//	{
//		printf("str5 and str6 are same\n");
//	}
//	else
//	{
//		printf("str5 and str6 are not same\n");
//	}
//	return 0;
//}

//整型数组：存放整型的数组
//字符数组：存放字符的数组
//指针数组是一个数组，用来存放指针，如int* arr[10]


//int main()
//{
//	const char* arr[] = {"abcdef","qwer","hello","asdfg"};
//	int i = 0;
//	for (i=0;i<4;i++)
//	{
//		printf("%s\n",arr[i]);
//	}
//	return 0;
//}


//int main()
//{
//	int arr1[] = { 1,2,3,4,5 };
//	int arr2[] = { 2,2,3,4,5 };
//	int arr3[] = { 3,2,3,4,5 };
//	int arr4[] = { 4,2,3,4,5 };
//	int* arr[] = { arr1,arr2,arr3,arr4};
//	//打印出个arr中的元素
//	int i = 0;
//	int j = 0;
//	for (i=0;i<4;i++)
//	{
//		for (j = 0; j < 5; j++)
//		{
//			//printf("%d ", *(arr[i] + j));
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}
//数组中的数组的元素
//指针数组中的整型数组中的元素

//int main()
//{
//	int a = 8;
//	int* pi = &a;
//
//	char ch = 'w';
//	char* pii = &ch;
//	
//	int arr[10];
//	int(*piii)[10] = &arr;
//	return 0;
//}


int main()
{
	int arr[] = {1,2,3,4,5};
	printf("%p\n", arr);
	printf("%p\n", arr+1);
	printf("%p\n", &arr);//&的优先级大于+的优先级
	printf("%p\n", &arr+1);
	printf("%p\n", &arr[0]);
	printf("%p\n",&arr[0]+1);//int(*)[5]
	return 0;
}

//指针类型决定了指针+1，加的是几
// 
// 
//int (*p)[5]   首先是一个指针，这个指针指向一个数组[]，
//该数组内由5个元素，指针名字为p，又不想p与[5]结合，所以*p
//需要加括号，这个数组内每一个元素都是整型


//int *arr[5]
//int (*arr)[5]  []的结合性比较高，但是小括号的结合性更高

//int (*p)[5]=arr   这种赋值方式是不正确的
//arr是首元素的地址，它的类型是int* ,而p的类型是int （*）[5]


char arr[5];
char(*p)[5] = &arr;